package com.huangyi.adminservice.house.domain.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 新增或编辑房源请求DTO
 * 
 * <p>用于接收房源新增或编辑的请求参数，包含房源的所有基本信息
 * 
 * @author huangyi
 * @version 1.0
 * @since 2024
 */
@Data
public class HouseAddOrEditReqDTO implements Serializable {

    /** 房源ID（编辑时必传，新增时为空） */
    private Long houseId;

    /** 房东用户ID */
    @NotNull(message = "房东id不能为空！")
    private Long userId;

    /** 房源标题 */
    @NotBlank(message = "标题不能为空！")
    private String title;

    /** 出租类型（整租/合租等） */
    @NotBlank(message = "出租类型不能为空！")
    private String rentType;

    /** 所在楼层 */
    @NotNull(message = "所在楼层不能为空！")
    private Integer floor;

    /** 总楼层数 */
    @NotNull(message = "总楼层不能为空！")
    private Integer allFloor;

    /** 房屋类型（住宅/公寓等） */
    @NotBlank(message = "户型不能为空！")
    private String houseType;

    /** 居室数量（几室几厅） */
    @NotBlank(message = "居室不能为空！")
    private String rooms;

    /** 房屋朝向 */
    @NotBlank(message = "朝向不能为空！")
    private String position;

    /** 房屋面积（平方米） */
    @NotNull(message = "面积（平方米）不能为空！")
    private Double area;

    /** 租金价格（元/月） */
    @NotNull(message = "价格（元）不能为空！")
    private Double price;

    /** 房源介绍 */
    @NotBlank(message = "介绍不能为空！")
    private String intro;

    /** 设备列表 */
    @NotEmpty(message = "设备列表不能为空！")
    private List<String> devices;

    /** 标签代码列表 */
    @NotEmpty(message = "标签列表不能为空！")
    private List<String> tagCodes;

    /** 头图URL */
    @NotBlank(message = "头图不能为空！")
    private String headImage;

    /** 房源图片列表 */
    private List<String> images;

    /** 城市ID */
    @NotNull(message = "城市id不能为空！")
    private Long cityId;

    /** 城市名称 */
    @NotBlank(message = "城市名不能为空！")
    private String cityName;

    /** 区域ID */
    @NotNull(message = "区域id不能为空！")
    private Long regionId;

    /** 区域名称 */
    @NotBlank(message = "区域名不能为空！")
    private String regionName;

    /** 社区名称 */
    @NotBlank(message = "社区名不能为空！")
    private String communityName;

    /** 详细地址 */
    @NotBlank(message = "详细地址不能为空！")
    private String detailAddress;

    /** 房源经度 */
    @NotNull(message = "房源经度不能为空！")
    private Double longitude;

    /** 房源纬度 */
    @NotNull(message = "房源纬度不能为空！")
    private Double latitude;

}